package java2022_07_12;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//指定一个目录，扫描这个目录，找到文件名中包含了指定字符的文件
//并提示用户是否要删除这个文件，根据用户的输入决定是否要删除
//由于目录中又包含了其他目录，因此就需要通过递归的方式，来吧这里面的内容也都获取到
public class FileDemo14 {
    public static void main(String[] args) throws IOException {
        //1.让用户指定一个带扫描的根目录和要查询的关键词
        System.out.print("请输入要扫描的根目录(绝对路径):");
        Scanner scanner = new Scanner(System.in);
        String root = scanner.next();
        File rootDir = new File(root);
        if(!rootDir.isDirectory()){
            System.out.println("您输入的路径错误！ 程序直接退出！");
        }
        System.out.print("请输入要查找的文件名中包含的关键词:");
        String token = scanner.next();

        //2.递归的遍历目录
        // result 表示递归遍历的结果，就包含这所有带有 token 关键词的文件名
        List<File> result = new ArrayList<>();
        scanDir(rootDir,token,result);
        //3.遍历result,问用户是否要删除该文件，根据用户的输入决定是否要删除
        for(File f : result){
            System.out.print(f.getCanonicalFile()+" 是否要删除?(Y/N):");
            String input = scanner.next();
            if(input.equals("Y")){
                f.delete();
            }
        }
    }

    //递归的来遍历根目录，找出里面所有符合条件的文件
    private static void scanDir(File rootDir, String token, List<File> result) throws IOException {
        //list返回的是一个文件名(String),使用 ListFiles 直接得到的是 File 对象，用起来更方便一些
        File[] files = rootDir.listFiles();
        if(files == null || files.length == 0){
            //当前的目录是一个空的目录
            return;
        }
        for(File f : files){
            if(f.isDirectory()){
                //如果当前的文件是一个目录，就递归的进行查找
                scanDir(f,token,result);
            }else{
                //如果当前文件是一个普通的文件，就判定这个文件是否包含了带查找的关键词
                if(f.getName().contains(token)){
                    result.add(f.getCanonicalFile());
                }
            }
        }
    }
}
